Simon McVittie [Wed, 26 Aug 2020 09:37:07 +0000 (10:37 +0100)]
d/libbabl-0.1-0.lintian-overrides: Silence some warnings about plugins
Many of these plugins genuinely don't call into libc, and some don't
call into any library code at all (they only do computation), so it's
OK that they have no dependencies.
John Marshall [Wed, 24 Jun 2020 17:00:38 +0000 (18:00 +0100)]
build: clean up version script handling
- ensure that symbol list dependency is correctly handled
- add shebang to python script to let meson do the interpreter selection
John Marshall [Wed, 20 May 2020 11:34:44 +0000 (12:34 +0100)]
build: improve doc build
- change build option to auto/true/false
- auto=false if cross build true otherwise
- replace xml_insert.sh with python script to allow doc gen on msys
Øyvind Kolås [Sun, 24 May 2020 01:15:07 +0000 (03:15 +0200)]
babl: progressively increase search depth from 2 to 4
Follow-on from previous commit, the specific paths looked for
that are longer than 2 involving formats with spaces are 3
steps long. Doing a 4 step deep search in these common cases
still introduces noticable "warm-up" jankiness in GIMP.
To additionally ensure we're not missing used valid and faster
than reference conversions in GIMP-2.10 we do an additional
search at depth 5 when no converison had been found *and* the
destination format has a space differing from sRGB.
Øyvind Kolås [Sat, 23 May 2020 16:53:36 +0000 (18:53 +0200)]
babl: search depth of 2 and 4, instead of 2 and 5
Conversions needed for color management in GIMP are not feasible in 2
steps, searching 5 deep for commonly used conversions causes severe UI
stalls, lowering the max search depth to 4 avoids this regression
introduced in 51437f216dbbef80f9bf661dd152452083119349, while keeping
the speed-up for other cases.
Ell [Mon, 18 May 2020 17:47:49 +0000 (20:47 +0300)]
palette: delay sorted radius vectors construction until needed
In babl-palette, when C11 atomic operations are available, don't
construct the sorted radius vectors on palette setup, but rather
when first converting from RGB to the palette format. This avoids
the costly vector-construction step for palettes that are never
used as the destination format of a conversion.
Ell [Mon, 18 May 2020 06:53:58 +0000 (09:53 +0300)]
HSV, HSL, HCY: wrap hue around during conversion to RGB
In the conversions from HSV, HSL, and HCY to RGB, wrap the hue
value around to the [0,1) range, instead of producing unspecified
results outside this range. In particular, hue=1.0 may arise when
going through lower precision, such as when decomposing/recomposing
an 8-bit image in GIMP (see gimp#5097).
Øyvind Kolås [Fri, 15 May 2020 00:56:46 +0000 (02:56 +0200)]
babl: adjust search depth for fishes in first pass
Search first only to a depth of 2, and accept the fastest found if any
faster than reference is found, if not search to depth 5. We lose out in
the unlikely to be frequent cases where 2-step babl fishes exist and a 3
step fish is faster. And gain the fishes where 4 step is faster than 3
(which was the old first pass search depth).
Øyvind Kolås [Thu, 14 May 2020 15:53:50 +0000 (17:53 +0200)]
babl: slightly pad source buffers for creating conversions
This is done because many babls conversions get optimized by C compilers
to read 16bytes of data at a time. Causing valgrind to report
"Invalid read of size 16" as a false positive. By padding the data at
least when creating conversions we mask the false positives.
avx2-int8: add gamma u8 -> linear float conversions
Add AVX2 conversions from u8 Y', Y'A, R'G'B, and R'G'B'A to float
Y, YA, RGB, and RGBA, respectively. The conversions use an LUT
together with the AVX2 gather instructions to process 8 values a
once. Depending on the formats and cache utilization, the new
conversions are between 1.25x to 2.2x faster than the existing
conversions.
Øyvind Kolås [Sat, 15 Feb 2020 06:22:25 +0000 (07:22 +0100)]
babl: babl-fish-path improve portability for ppc
Quoting his explaination for why this fixes things (the other half of
the same function was already portable.)
"This breaks on PowerPC 32-bit, because the calling convention for
passing a union is to pass a pointer to a temporary copy of the union.
This pointer isn't as a function pointer. On some other platforms, the
call would just copy the union, which is like copying the function
pointer. On all platforms, the compiler doesn't check the type, because
babl_conversion_new() has a va_arg(3) prototype."
Portabilitiy issue figured out by George Koehler, This fixes issue #24.
Øyvind Kolås [Sun, 12 Jan 2020 22:47:08 +0000 (23:47 +0100)]
meson: globally opt out of unsafe math optimizations
Thus closing issue #49, with a decision to opt for fully predictable
math, and increasing the ability to extend the use of hashes in result
image tests in GEGL.
Øyvind Kolås [Fri, 8 Nov 2019 18:07:47 +0000 (19:07 +0100)]
build: opt out of unsafe math optimizations in reference and base
This makes the reference code paths used for verifying conversions in
extensions not involve for instance fast reciprocal approximations, see issue
#49. The extensions are still compiled with full optimizations.
Øyvind Kolås [Fri, 8 Nov 2019 12:54:15 +0000 (13:54 +0100)]
babl: adjust default BABL_TOLERANCE
This as a start of fixing issue #49, lower precision code gets generated
on AMD EPYC, due to use of rcpps to get a reciprocal - which has lower
precision on AMD EPYC. The conversions with AMD EPYC gets included with
a small margin - so we should not be shedding many other fast conversions
due to this.